ãœãŒã·ã£ã«ãããã¯ãŒã¯éçºã«ãããåå®å šæ§ã®åãæ¢æ±ããã¹ã±ãŒã©ãã«ãªã°ããŒãã«ã³ãã¥ããã£ãã©ãããã©ãŒã ã®ããŒã¿æŽåæ§ãã»ãã¥ãªãã£ãéçºè ãšã¯ã¹ããªãšã³ã¹ãåäžãããŸããå®è£ ãšã¡ãªããã®è©³çްã
åå®å šãªãœãŒã·ã£ã«ãããã¯ãŒã¯ïŒã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®å ç¢ãªã³ãã¥ããã£ãã©ãããã©ãŒã ã®æ§ç¯
ãŸããŸãçžäºæ¥ç¶ãé²ãäžçã«ãããŠããœãŒã·ã£ã«ãããã¯ãŒã¯ãšã³ãã¥ããã£ãã©ãããã©ãŒã ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãã³ã©ãã¬ãŒã·ã§ã³ãã³ã³ãã³ãå ±æã®ããã®éèŠãªå°ç®¡ãšããŠæ©èœããŠããŸããå°éçãªãããã¯ãŒãã³ã°ãµã€ããããèå³é¢å¿ã«åºã¥ããã©ãŒã©ã ãŸã§ããããã®ãã©ãããã©ãŒã ã¯ãçŸä»£ã®ããžã¿ã«ã©ã€ãã®äžå¿ãšãªã£ãŠããŸããããããé åçãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®èåŸã«ã¯ããŠãŒã¶ãŒãããã¡ã€ã«ãæçš¿ãã³ã¡ã³ããæ¥ç¶ãã€ã³ã¿ã©ã¯ã·ã§ã³ãªã©ã现å¿ã®æ³šæãã»ãã¥ãªãã£ãã¹ã±ãŒã©ããªãã£ããã£ãŠåŠçããå¿ èŠãããããŒã¿ã®è€éãªã¿ãã¹ããªãŒããããŸãã
ããã§ãåå®å šæ§ãåºæ¬çãªãã©ãã€ã ãšããŠç»å Žãããããã®è€éãªã·ã¹ãã ã®èšèšãéçºãããã³ä¿å®ã®æ¹æ³ãå€é©ããŸãã倿§ã§ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãµãŒãã¹ãæäŸã§ãããå埩åãããããã°ããªãã髿§èœãªã³ãã¥ããã£ãã©ãããã©ãŒã ã®æ§ç¯ãç®æãéçºè ã«ãšã£ãŠãåå®å šæ§ã®æ¡çšã¯åãªããã¹ããã©ã¯ãã£ã¹ã§ã¯ãªããæŠç¥çãªå¿ é äºé ãšãªã£ãŠããŸãã
ãœãŒã·ã£ã«ãããã¯ãŒã¯ã«ãããåå®å šæ§ã®æ žå¿æŠå¿µ
æ¬è³ªçã«ãåå®å šæ§ãšã¯ãã³ãŒããããŒã¿ãäžè²«æ§ãšäºæž¬å¯èœãªæ¹æ³ã§åŠçããããšã§ããããã¯ã倿°ãšããŒã¿æ§é ãç¹å®ã®åïŒäŸïŒæååãæ°å€ãããŒã«å€ããŸãã¯ã«ã¹ã¿ã ãªããžã§ã¯ãïŒã§æç€ºçã«å®çŸ©ãããŠãããã·ã¹ãã ãã¢ããªã±ãŒã·ã§ã³ã®ã©ã€ããµã€ã¯ã«å šäœã§ãããã®åãå°éããããšã匷å¶ããããšãæå³ããŸããåå®å šãªç°å¢ã§ã¯ãééã£ãåã®å€ã䜿çšããããšãããšïŒæ°å€ãæååãšããŠæ±ãããŸãã¯ãªããžã§ã¯ãã®ååšããªãããããã£ã«ã¢ã¯ã»ã¹ãããªã©ïŒããããã°ãé£ãããããåŸã®æ®µéã§çŸãã埮åŠãªåé¡ã§ã¯ãªããã³ã³ãã€ã«æãŸãã¯åæå®è¡æã®ãšã©ãŒãçºçããŸãã
ãªãããããœãŒã·ã£ã«ãããã¯ãŒã¯ã«ãšã£ãŠéèŠãªã®ã§ããããïŒ
ãœãŒã·ã£ã«ãããã¯ãŒã¯ã¯ãæ¬è³ªçã«ããŒã¿éçŽåã®ã¢ããªã±ãŒã·ã§ã³ã§ããç¡æ°ã®ããŒã¿ãã€ã³ããèããŠã¿ãŸãããã
- ãŠãŒã¶ãŒãããã¡ã€ã«ïŒ IDããŠãŒã¶ãŒåãã¡ãŒã«ãèªå·±ç޹ä»ããããã£ãŒã«ç»åURLãå Žæãåéãªã¹ããåå ã°ã«ãŒãããã©ã€ãã·ãŒèšå®ã
- æçš¿/ã³ã³ãã³ãïŒ IDãäœæè ãããã¹ãã³ã³ãã³ããç»å/ãããªURLãã¿ã€ã ã¹ã¿ã³ããå Žæã¿ã°ãé¢é£ãããã¯ã衚瀺èšå®ã
- ã€ã³ã¿ã©ã¯ã·ã§ã³ïŒããããã³ã¡ã³ããã·ã§ã¢ããªã¢ã¯ã·ã§ã³ããã€ã¬ã¯ãã¡ãã»ãŒãžã
- é¢ä¿ïŒåéãªã¯ãšã¹ãããã©ãã¯ãŒããããã¯ããããŠãŒã¶ãŒãã°ã«ãŒãã¡ã³ããŒã·ãããã¢ãã¬ãŒã·ã§ã³ããŒã«ã
- éç¥ïŒéç¥ã®çš®é¡ãåä¿¡è ãéä¿¡è ãé¢é£ã³ã³ãã³ãã
åå®å šæ§ããªããšãããŒã¿ã®äžæŽåããã°ã®å¯èœæ§ãéåžžã«å€§ãããªããŸãããŠãŒã¶ãŒã®IDãæååãšããŠæ±ãããããæ°å€ãšããŠæ±ããããããŠãæ€çŽ¢ã倱æããããäžæ£ç¢ºãªããŒã¿ãé¢é£ä»ãããããããã·ããªãªãæ³åããŠã¿ãŠãã ããããŸãã¯ããã£ãŒããã¬ã³ããªã³ã°ãããšãã«ã¯ã©ãã·ã¥ãåŒãèµ·ãããéèŠãªãäœæè ããã£ãŒã«ããæ¬ èœããŠããæçš¿ãªããžã§ã¯ãããããã®å°ããªäžæŽåã¯ããã©ãããã©ãŒã ã®é倧ãªäžå®å®æ§ãã»ãã¥ãªãã£è匱æ§ãããã³ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ããã«æ³¢åããå¯èœæ§ããããŸããããã¯ãããŸããŸãªããã€ã¹ããããã¯ãŒã¯ç°å¢ãæã€ã°ããŒãã«ãŠãŒã¶ãŒããŒã¹å šäœã§å¢å¹ ãããåé¡ã§ãã
åå®å šãªå®è£ ã®ããã®ã¢ãŒããã¯ãã£äžã®èæ ®äºé
å æ¬çãªåå®å šæ§ãå®çŸããã«ã¯ãããŒã¿ããŒã¹ã¹ããŒããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãŸã§ããœãŒã·ã£ã«ãããã¯ãŒã¯ã®ã¢ãŒããã¯ãã£ã®ãã¹ãŠã®å±€ã«æµžéããå šäœçãªã¢ãããŒããå¿ èŠã§ãã
ããã³ããšã³ãåã®å®è£ ïŒäŸïŒTypeScript/GraphQLã䜿çšïŒ
ããã³ããšã³ãã¯ããŠãŒã¶ãŒããã©ãããã©ãŒã ãšçŽæ¥å¯Ÿè©±ããå Žæã§ããããã§åå®å šæ§ã確ä¿ããããšã§ãäžè¬çãªUIãã°ãé²ããéçºè ãšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããTypeScriptã®ãããªãã¯ãããžãŒã¯ãããã«äžå¯æ¬ ãªãã®ãšãªã£ãŠããŸãã
-
UIã³ã³ããŒãã³ããšç¶æ
ã®TypeScriptïŒ TypeScriptã¯ãéçåå®çŸ©ã远å ããããšã«ãããJavaScriptãæ¡åŒµããŸããããã«ãããéçºè
ã¯ãã³ã³ããŒãã³ããæåŸ
ããpropsãç¶æ
ãããã³ããŒã¿ãªããžã§ã¯ãã®æ£ç¢ºãªåœ¢ç¶ãå®çŸ©ã§ããŸããããšãã°ã`UserProfileCard`ã³ã³ããŒãã³ãã¯ã`id`ã`username`ãããã³`profilePictureUrl`ããããã£ãæã€`User`ãªããžã§ã¯ããæåŸ
ããããšãæç€ºçã«å®£èšããéçºäžã«æ¬ èœãŸãã¯äžæ£ãªãã®ãããå Žåã«ãšã©ãŒããã£ããã§ããŸãã
interface User { id: string; username: string; profilePictureUrl: string; bio?: string; } interface UserProfileCardProps { user: User; onEditClick: (userId: string) => void; } function UserProfileCard({ user, onEditClick }: UserProfileCardProps) { // ... component logic } -
GraphQLãšã³ãŒãçæïŒ GraphQLã¯ãåå®å
šãªAPIéä¿¡ã«æé©ãªéžæè¢ã§ãããã®ã¹ããŒãå®çŸ©èšèªïŒSDLïŒã¯ãã¯ãšãªãŸãã¯å€æŽã§ãããã¹ãŠã®ããŒã¿ã®åãæ¬è³ªçã«å®çŸ©ããŸããGraphQL Code Generatorã®ãããªããŒã«ã¯ãGraphQLã¹ããŒããšã¯ãšãªããçŽæ¥TypeScriptåïŒãŸãã¯ä»ã®èšèªã®åïŒãèªåçã«çæã§ããŸããããã«ãããããã³ããšã³ãã¯ãããã¯ãšã³ãããæåŸ
ããããŒã¿ã®æ£ç¢ºãªæ§é ãåžžã«èªèããã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ã·ãŒã ã¬ã¹ã§åå®å
šãªã³ã³ãã©ã¯ããäœæã§ããŸãã
// GraphQL Schema Example type User { id: ID! username: String! email: String! posts: [Post!] } type Post { id: ID! content: String! author: User! createdAt: String! } // Generated TypeScript type (simplified) interface GQL_User { id: string; username: string; email: string; posts: GQL_Post[]; } - ã¯ã©ã€ã¢ã³ãåŽã®æ€èšŒïŒ ããã¯ãšã³ãã®æ€èšŒãæãéèŠã§ãããåå®çŸ©ã«ãã£ãŠåŒ·åãããã¯ã©ã€ã¢ã³ãåŽã®æ€èšŒã¯ããŠãŒã¶ãŒã«å³åº§ã«ãã£ãŒãããã¯ãæäŸããäžæ£ãªããŒã¿ããµãŒããŒã«å°éããã®ãé²ããŸãã
ããã¯ãšã³ãåã®å®è£ ïŒäŸïŒScalaãKotlinãRustãGoã䜿çšïŒ
ããã¯ãšã³ãã¯ãããžãã¹ããžãã¯ãããŒã¿ã¹ãã¬ãŒãžãAPIãšã³ããã€ã³ãã管çãããœãŒã·ã£ã«ãããã¯ãŒã¯ã®é è³ã§ããããã¯ãšã³ãã§ã®åŒ·åãªéçåä»ãã¯ãå ç¢ãªæäœã«äžå¯æ¬ ã§ãã
-
匷åãªåä»ãèšèªïŒ ScalaãKotlinãRustãGoãHaskellãC#ãªã©ã®èšèªã¯ãåå®å
šæ§ãäžæ žçãªååãšããŠæ§ç¯ãããŠããŸãããããã¯ãã³ã³ãã€ã«æã«åãã§ãã¯ã匷å¶ããã³ãŒããå®è¡ããåã«ãåºç¯å²ã®ãšã©ãŒããã£ããããŸãã
- Scala/KotlinïŒ å€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ã¢ããªã±ãŒã·ã§ã³ã§ãã䜿çšããã匷åãªãªããžã§ã¯ãæååä»ãã«å ããŠã匷åãªé¢æ°åããã°ã©ãã³ã°æ§é ãæäŸããŸãã
- RustïŒ ã¬ããŒãžã³ã¬ã¯ã¿ãŒãªãã§ã¡ã¢ãªã®å®å šæ§ãé«ããããŒã¿ã®æŽåæ§ãä¿èšŒããã¡ã¢ãªã¢ã¯ã»ã¹ã«é¢é£ããäžè¬çãªã»ãã¥ãªãã£è匱æ§ãé²ããŸãã
- GoïŒ åªããåæå®è¡æ©èœãåãããããã·ã³ãã«ã§å®çšçãªåå®å šæ§ãžã®ã¢ãããŒããæäŸãã髿§èœãã€ã¯ããµãŒãã¹ã«é©ããŠããŸãã
- åãåãå ¥ãããã¬ãŒã ã¯ãŒã¯ïŒ å€ãã®ææ°ã®ããã¯ãšã³ããã¬ãŒã ã¯ãŒã¯ã¯ãåå®å šãªèšèªãšããçµ±åãããŠããŸããããšãã°ãSpring BootïŒKotlinãŸãã¯Javaã䜿çšïŒãPlay FrameworkïŒScalaã䜿çšïŒããŸãã¯NestJSïŒTypeScriptã§æ§ç¯ïŒãªã©ã®Node.jsãã¬ãŒã ã¯ãŒã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯å šäœã§åå®çŸ©ã奚å±ããæŽ»çšããŠããŸãã
- APIã¬ã€ã€ãŒã§ã®ããŒã¿æ€èšŒïŒ ã³ãŒãã§åŒ·åãªåã䜿çšããå Žåã§ããå€éšããŒã¿ïŒã¯ã©ã€ã¢ã³ããŸãã¯ãã®ä»ã®ãµãŒãã¹ããïŒãæ€èšŒããå¿ èŠããããŸãããã¬ãŒã ã¯ãŒã¯ã¯ãåä¿¡JSON/XMLãã€ããŒããäºåå®çŸ©ãããã¹ããŒããŸãã¯åã«å¯ŸããŠæ€èšŒããã¡ã«ããºã ãæäŸããæ£ããæ§é åããåä»ããããããŒã¿ã®ã¿ãã·ã¹ãã ã«å ¥åãããããã«ããŸãã
ããŒã¿ã¬ã€ã€ãŒåã®å®è£
ããŒã¿ããŒã¹ã¯ã究極ã®çå®ã®æºã§ãããã®ã¬ã€ã€ãŒã§ã®åå®å šæ§ã«ãããããŒã¿ã®æ°žç¶æ§ãšååŸãæŽåæ§ãšä¿¡é Œæ§ã確ä¿ããŸãã
-
ããŒã¿ããŒã¹ã¹ããŒãïŒ ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ïŒPostgreSQLãMySQLãªã©ïŒã¯ãã¹ããŒãå®çŸ©ïŒäŸïŒ`VARCHAR`ã`INT`ã`BOOLEAN`ã`TIMESTAMP`ïŒãéããŠãæ¬è³ªçã«åŒ·åãªåä»ããæäŸããŸããæ£ç¢ºãªååãå¶çŽïŒ
NOT NULLãUNIQUEïŒãããã³é¢ä¿ïŒå€éšããŒïŒãå®çŸ©ãããšãããŒã¿ã®æŽåæ§ã匷å¶ãããŸãã -
ORMs/ODMsïŒ SQLããŒã¿ããŒã¹çšã®ãªããžã§ã¯ãé¢ä¿ããããŒïŒORMïŒïŒäŸïŒHibernateãSQLAlchemyãPrismaïŒãŸãã¯NoSQLããŒã¿ããŒã¹çšã®ãªããžã§ã¯ãããã¥ã¡ã³ãããããŒïŒODMïŒïŒäŸïŒMongoDBçšã®MongooseïŒã¯ã匷åãªåä»ããããã¢ããªã±ãŒã·ã§ã³ã³ãŒããšããŒã¿ããŒã¹ã®éã®ã®ã£ãããåããŸããããã«ãããããŒã¿ããŒã¹ã¹ããŒããåæ ããããã°ã©ãã³ã°èšèªã§ããŒã¿ã¢ãã«ãå®çŸ©ããããŒã¿ããŒã¹ãšã®åå®å
šãªçžäºäœçšãæäŸã§ããŸãã
// Example: Prisma Schema model User { id String @id @default(cuid()) username String @unique email String @unique bio String? posts Post[] createdAt DateTime @default(now()) } model Post { id String @id @default(cuid()) content String author User @relation(fields: [authorId], references: [id]) authorId String createdAt DateTime @default(now()) } - ã¹ããŒãé§åã®NoSQLïŒ NoSQLããŒã¿ããŒã¹ã¯ã¹ããŒãã¬ã¹ã§ããããšãå€ãã§ãããçŸåšãå€ãã¯ã¹ããŒãæ€èšŒïŒäŸïŒMongoDBã®ã¹ããŒãæ€èšŒæ©èœïŒããµããŒãããŠããããã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒã§ã¹ããŒãã®ãããªæ§é ã匷å¶ããããŒã«ã§äœ¿çšãããŠããŸãã
ãœãŒã·ã£ã«ãããã¯ãŒã¯ã®ã³ã³ããã¹ãã«ãããåå®è£ ã®å®äŸ
TypeScriptã®ãããªæ§æã䜿çšããŠãåå®çŸ©ãäžè¬çãªãœãŒã·ã£ã«ãããã¯ãŒã¯ãšã³ãã£ãã£ã«ã©ã®ããã«å ·äœçã«çŸããããèŠãŠã¿ãŸããããããã¯ãä»ã®åŒ·åãªåä»ãèšèªã«ç¿»èš³ã§ããŸãã
ãŠãŒã¶ãŒãããã¡ã€ã«
interface User {
readonly id: string; // Unique identifier, immutable
username: string;
email: string;
passwordHash: string; // Stored securely, never directly exposed
profilePictureUrl?: string; // Optional URL
bio?: string;
location?: string;
dateOfBirth?: Date;
createdAt: Date;
updatedAt: Date;
friends: UserRelationship[]; // Collection of relationships
groups: GroupMember[]; // Collection of group memberships
privacySettings: PrivacySettings;
}
interface PrivacySettings {
showEmail: boolean;
showLocation: boolean;
profileVisibility: 'PUBLIC' | 'PRIVATE' | 'FRIENDS_ONLY';
}
æçš¿ãšã³ã³ãã³ã
interface Post {
readonly id: string;
author: Pick<User, 'id' | 'username' | 'profilePictureUrl'>; // Only relevant user info for post display
content: string;
mediaUrls: string[]; // Array of URLs for images/videos
createdAt: Date;
updatedAt: Date;
likes: string[]; // Array of User IDs who liked the post
comments: Comment[];
tags: string[];
isPublic: boolean;
location?: GeoLocation;
}
interface Comment {
readonly id: string;
author: Pick<User, 'id' | 'username' | 'profilePictureUrl'>;
postId: string;
content: string;
createdAt: Date;
}
interface GeoLocation {
latitude: number;
longitude: number;
name?: string;
}
é¢ä¿ãšã°ã«ãŒã
enum RelationshipStatus { PENDING = 'PENDING', ACCEPTED = 'ACCEPTED', BLOCKED = 'BLOCKED' }
interface UserRelationship {
readonly id: string;
initiatorId: string; // User ID who sent the request
recipientId: string; // User ID who received the request
status: RelationshipStatus;
createdAt: Date;
updatedAt: Date;
}
enum GroupRole { MEMBER = 'MEMBER', MODERATOR = 'MODERATOR', ADMIN = 'ADMIN' }
interface Group {
readonly id: string;
name: string;
description: string;
ownerId: string;
members: GroupMember[];
posts: Post[]; // Or just a reference to posts IDs
createdAt: Date;
}
interface GroupMember {
userId: string;
groupId: string;
role: GroupRole;
joinedAt: Date;
}
ãããã®äŸã¯ãæ£ç¢ºãªåå®çŸ©ãã©ã®ããã«æç¢ºããšæ§é ããããããã瀺ããŠããŸãã`username`ã«`number`ãå²ãåœãŠããã`createdAt`ïŒ`Date`ãªããžã§ã¯ããæåŸ ïŒã«`string`ãå²ãåœãŠããããããšãããšããããã€ã®ã¯ããåã«ã³ã³ãã€ã©ã«ãã£ãŠããã«ãã©ã°ãç«ãŠãããŸãã
ãã°ã®åæžãè¶ ããã¡ãªããïŒã°ããŒãã«ãªèŠç¹
åå®å šæ§ã®æ¡çšã®äž»ãªæšé²åã¯ãã°ã®åæžã§ããããã®å©ç¹ã¯ã¯ããã«åºç¯å²ã«åã³ãç¹ã«å€æ§ãªåœéçãªãŠãŒã¶ãŒããŒã¹ã«ãµãŒãã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã ã®ã³ã©ãã¬ãŒã·ã§ã³ãã·ã¹ãã ã®å ç¢æ§ãããã³ãã©ãããã©ãŒã å šäœã®æåã«å€§ããªåœ±é¿ãäžããŸãã
1. ããŒã¿æŽåæ§ãšäžè²«æ§ã®åäž
ã°ããŒãã«ãã©ãããã©ãŒã ã®å ŽåãããŒã¿ã®æŽåæ§ãæãéèŠã§ããå°åããšã«ç°ãªãããŒã¿å ¥åãã¿ãŒã³ãŸãã¯æåŸ ãããå ŽåããããŸããåå®å šæ§ã«ãããããŒã¿ã®çºçå ã«é¢ä¿ãªãããã®æ§é ãšæåŸ ãããå€ãäžè²«ããŠç¶æãããŸããããã«ããããã±ãŒã«åºæã®æ¥ä»åœ¢åŒãã·ã¹ãã ãå£ããããæåãšã³ã³ãŒãã£ã³ã°ã®åé¡ãç·©ãåä»ãã®ããã«èª€ã£ãŠè§£éããããããåé¡ãåé¿ãããŸãã
2. 忣åããŒã ã®ä¿å®æ§ãšã¹ã±ãŒã©ããªãã£ã®åäž
å€§èŠæš¡ãªãœãŒã·ã£ã«ãããã¯ãŒã¯ã¯ãåäžã®ã¢ããªã·ãã¯ããŒã ã«ãã£ãŠæ§ç¯ãããããšã¯ãã£ãã«ãããŸãããå€ãã®å ŽåãããŸããŸãªã¿ã€ã ãŸãŒã³ãæåã«ãŸãããè€æ°ã®ããŒã ããããŸããŸãªæ©èœãŸãã¯ãã€ã¯ããµãŒãã¹ã«åãçµãã§ããŸããåå®å šæ§ã¯ãæ®éçãªèšèªãšå¥çŽãæäŸããŸãããŠãŒã¶ãŒã¢ãžã¥ãŒã«ã«åãçµãã§ããããŒã ã`User`åãå®çŸ©ãããšãã¡ãã»ãŒãžã³ã°ãµãŒãã¹ãéçºããŠããå¥ã®ããŒã ã¯ããã®æ£ç¢ºãªããããã£ãšåäœãç¥ã£ãŠããããããã®æ£ç¢ºãª`User`åãèªä¿¡ãæã£ãŠå©çšã§ããŸããããã«ããã誀ã£ãã³ãã¥ãã±ãŒã·ã§ã³ãå€§å¹ ã«åæžãããæ°ããåœéçãªéçºè ã®ãªã³ããŒãã£ã³ã°ãé«éåãããå€§èŠæš¡ãªã³ãŒãããŒã¹å šäœã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãããå®å šã«ãªããŸãããã©ãããã©ãŒã ãæ¡åŒµãããã«ã€ããŠãæ¢åã®ãµãŒãã¹ã«æ°ããæ©èœãããé«ãä¿¡é Œæ§ã§çµ±åã§ããŸãã
3. ããåªããã»ãã¥ãªãã£äœå¶
匷åãªåä»ãã¯ãæ¬è³ªçã«ç¹å®ã®ã¯ã©ã¹ã®ã»ãã¥ãªãã£è匱æ§ãé²ãããšãã§ããŸããäŸïŒ
- ã€ã³ãžã§ã¯ã·ã§ã³æ»æïŒ 決ããŠäžèœè¬ã§ã¯ãããŸãããã匷åãªåä»ããããããŒã¿ããŒã¹ã¯ãšãªïŒORMãä»ãããã©ã¡ãŒã¿åã¯ãšãªã®äœ¿çšãªã©ïŒã¯ãå ¥åå€ãå®è¡å¯èœãªã³ãŒãã§ã¯ãªãããŒã¿ãšããŠæ±ãããããã«ããããšã§ãSQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ã軜æžã§ããŸãã
- åã®æ··ä¹±ã®è匱æ§ïŒ ã·ã¹ãã ãããŒã¿åã誀ã£ãŠè§£éããã®ãé²ããšããã®ãããªæ··ä¹±ã«äŸåããŠäžæ£ã¢ã¯ã»ã¹ãååŸããããä»»æã®ã³ãŒããå®è¡ããããããšã¯ã¹ããã€ãã黿¢ã§ããŸãã
- ã¢ã¯ã»ã¹å¶åŸ¡ïŒ åã·ã¹ãã ã¯ãç¹å®ã®ããŒã«ãŸãã¯æš©éãæã€ãªããžã§ã¯ãã®ã¿ãç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ããããšã匷å¶ã§ãããããã¢ã¯ã»ã¹å¶åŸ¡ã¡ã«ããºã ã«å¥ã®ã»ãã¥ãªãã£ã¬ã€ã€ãŒã远å ã§ããŸãã
æ©å¯æ§ã®é«ãå人æ å ±ãæ±ãã°ããŒãã«ãã©ãããã©ãŒã ã®å Žåãå ç¢ãªã»ãã¥ãªãã£ã¯äº€æžäžèœã§ãããåå®å šæ§ã¯ãã®å ç¢æ§ã«å€§ããè²¢ç®ããŸãã
4. åªããéçºè ãšã¯ã¹ããªãšã³ã¹ãšçç£æ§
éçºè ã¯ããªãã®æéããããã°ã«è²»ãããŸããã³ã³ãã€ã«æã«ãã£ãããããåãšã©ãŒã¯ãå®è¡æãšã©ãŒã®ã«ããŽãªå šäœãæé€ããéçºè ãèŠã€ãã«ããããŒã¿ãã¹ãããã远跡ããã®ã§ã¯ãªããããžãã¹ããžãã¯ã«éäžã§ããããã«ããŸããIDEã§ã®ãªãŒãã³ã³ããªãŒããã€ã³ããªãžã§ã³ããªãã¡ã¯ã¿ãªã³ã°ãã€ã³ã©ã€ã³ãšã©ãŒãã£ãŒãããã¯ïŒåæ å ±ã«åºã¥ããŠããŸãïŒãªã©ã®æ©èœã¯ãéçºè ã®çç£æ§ãåçã«åäžãããŸããããã¯ã广çãªã³ã©ãã¬ãŒã·ã§ã³ããŒã«ãšæç¢ºãªã³ãŒãããŒã¹ãå°ççããã³èšèªã®éå£ãä¹ãè¶ããã°ããŒãã«ããŒã ã«ç¹ã«åœ¹ç«ã¡ãŸãã
5. çµ±åã®ããã®ããæç¢ºãªAPIå¥çŽ
å€ãã®ãœãŒã·ã£ã«ãããã¯ãŒã¯ã¯ããµãŒãããŒãã£çµ±åçšã®APIãæäŸããŠãããäžçäžã®ä»ã®ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ããžãã¹ããã©ãããã©ãŒã ãšããåãã§ããŸãïŒäŸïŒåæãããŒã±ãã£ã³ã°ããŸãã¯ã³ã³ãã³ãã·ã³ãžã±ãŒã·ã§ã³çšïŒãåå®å šãªããã¯ãšã³ãã¯ãæ¬è³ªçã«ãããæç¢ºã§æç€ºçãªAPIå¥çŽãæäŸããŸããAPIã䜿çšããéçºè ã¯ããã€ãã£ãèšèªãããŒã«ã«é¢ä¿ãªããAPIã®ã¹ããŒãïŒäŸïŒOpenAPI/SwaggerãGraphQL SDLïŒããã¯ã©ã€ã¢ã³ãåŽã®åãçŽæ¥çæããæ£ããå¹ççã«çµ±åã§ããããã«ããããšãã§ããŸããããã«ãããã°ããŒãã«ããŒãããŒã«ãšã£ãŠãããå¥å šã§äºæž¬å¯èœãªãšã³ã·ã¹ãã ãè²ãŸããŸãã
6. ãŠãŒã¶ãŒã®ä¿¡é Œæ§ãšä¿¡é Œæ§ã®åäž
æçµçã«ãããå®å®ãããã°ã®å°ãªããã©ãããã©ãŒã ã¯ãããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸããæ±äº¬ããã€ããããã³ãã³ã«ãããã©ããã«ãããããããœãŒã·ã£ã«ãããã¯ãŒã¯ã®ãŠãŒã¶ãŒã¯ä¿¡é Œæ§ãæåŸ ããŠããŸããé »ç¹ãªã¯ã©ãã·ã¥ãããŒã¿ã®ç ŽæããŸãã¯äžè²«æ§ã®ãªãåäœã¯ãä¿¡é Œãæãªãå¯èœæ§ããããŸããåå®å šæ§ã¯ãç«¶äºã®æ¿ããç¶æ³ã§ã°ããŒãã«ãŠãŒã¶ãŒããŒã¹ãç¶æããæé·ãããããã«äžå¯æ¬ ãªä¿¡é Œæ§ã®åºç€ãæ§ç¯ããã®ã«åœ¹ç«ã¡ãŸãã
課é¡ãšèæ ®äºé
å©ç¹ã¯é åçã§ãããåå®å šæ§ã®æ¡çšã«ã¯èª²é¡ããªãããã§ã¯ãããŸããã
- æåã®åŠç¿æ²ç·ïŒ åçåä»ãèšèªã«æ £ããŠããããŒã ã¯ãéçåä»ãã§æåã®åŠç¿æ²ç·ã«çŽé¢ããå¯èœæ§ããããŸãããã¬ãŒãã³ã°ãšã¡ã³ã¿ãŒã·ãããžã®æè³ãäžå¯æ¬ ã§ãã
- åé·æ§ã®å¢å ïŒ å Žåã«ãã£ãŠã¯ãåãå®çŸ©ãããšãç¹ã«è€éãªããŒã¿æ§é ã®å Žåãããå€ãã®ãã€ã©ãŒãã¬ãŒãã³ãŒãã远å ãããå¯èœæ§ããããŸãããã ããææ°ã®èšèªãšããŒã«ã¯ãåæšè«ãšã³ãŒãçæã«ãã£ãŠããã軜æžããããšããããããŸãã
- ããŒã«ãšãšã³ã·ã¹ãã ã®æçåºŠïŒ åå®å šæ§ã®æå¹æ§ã¯ãåªããããŒã«ïŒIDEãã³ã³ãã€ã©ããªã³ã¿ãŒïŒã«å€§ããäŸåããŸããTypeScriptãJavaãC#ãGoãªã©ã®èšèªã§ã¯æçããŠããŸãããæ°ãããšã³ã·ã¹ãã ã§ã¯ãããå ç¢ãªãµããŒããå°ãªãå¯èœæ§ããããŸãã
- ã¬ã¬ã·ãŒã·ã¹ãã ãšã®çµ±åïŒ æ°ãã匷åãªåä»ãã·ã¹ãã ããåçã«åä»ããããŠããå¯èœæ§ã®ããããŸãã¯ããã¥ã¡ã³ãåãããŠããªãæ¢åã®ã¬ã¬ã·ãŒãµãŒãã¹ãšçµ±åããããšã¯ãå°é£ãªå ŽåããããŸããæ éãªAPIå¢çãšããŒã¿å€æã¬ã€ã€ãŒãå¿ èŠã§ãã
- é©åãªãã©ã³ã¹ãèŠã€ããïŒ åãéå°ã«èšèšãããšãäžå¿ èŠãªè€éãã«ã€ãªããå¯èœæ§ããããŸããéèŠãªãã¡ã€ã³ãšã³ãã£ãã£ãšã€ã³ã¿ã©ã¯ã·ã§ã³ã«æã䟡å€ãæäŸããåå®çŸ©ã«çŠç¹ãåœãŠãŠããã©ã³ã¹ããšãããšãéèŠã§ãã
æ¡çšã®ããã®ãã¹ããã©ã¯ãã£ã¹
åå®å šãªãœãŒã·ã£ã«ãããã¯ãŒã¯ãæ£åžžã«å®è£ ããã«ã¯ããããã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããã
- å°ããå§ããŠå埩ããïŒ ãã¹ãŠãäžåºŠã«æžãæããããšããªãã§ãã ãããéèŠãªæ°æ©èœãŸãã¯ç¹å®ã®ãã€ã¯ããµãŒãã¹ã®åä»ãããå§ããŸããããŒã ãèªä¿¡ãšçµéšãç©ãã«ã€ããŠãç¯å²ãåŸã ã«æ¡å€§ããŸãã
- ãã¬ãŒãã³ã°ãšããã¥ã¡ã³ããžã®æè³ïŒ éžæããåã·ã¹ãã ãšèšèªãçè§£ããããã®ãªãœãŒã¹ãšã¯ãŒã¯ã·ã§ãããéçºè ã«æäŸããŸããç¹å®ã®ã³ãŒãããŒã¹ã®åèŠåãšãã¹ããã©ã¯ãã£ã¹ãææžåããŸãã
- ã³ãŒãçæããŒã«ã掻çšããïŒ GraphQLãããŒã¿ããŒã¹ã¹ããŒããªã©ã®APIã®å Žåã¯ãã¯ã©ã€ã¢ã³ãåŽãšãµãŒããŒåŽã®åãèªåçã«çæããããŒã«ã䜿çšããŸããããã«ãããæäœæ¥ã軜æžãããäžè²«æ§ã確ä¿ãããŸãã
- åã®èªèæåãä¿é²ããïŒ åã®äœ¿çšã粟æ»ããå®çŸ©ãžã®æºæ ãä¿èšŒããåãããæ£ç¢ºã«ã§ããé åãç¹å®ããã³ãŒãã¬ãã¥ãŒã奚å±ããŸãã
- é©åãªããŒã«ãšèšèªãéžæããïŒ ããŒã ã®å°éç¥èãšåå®å šæ§ã®ãããžã§ã¯ãã®èŠä»¶ã«èªç¶ã«äžèŽããèšèªãšãã¬ãŒã ã¯ãŒã¯ãéžæããŸããããã³ããšã³ãã«ã¯TypeScriptãããã¯ãšã³ãã«ã¯Kotlin/Scala/Rust/Goã人æ°ãããã匷åãªéžæè¢ã§ãã
- ãã¡ã€ã³é§åååã§èšèšããïŒ ãã¡ã€ã³ã¢ãã«ã«åå®çŸ©ãã¬ã€ããããŸãããœãŒã·ã£ã«ãããã¯ãŒã¯ã®ããžãã¹ãšã³ãã£ãã£ãšããã»ã¹ãæ£ç¢ºã«è¡šçŸããåãå®çŸ©ããããšã«ãããã³ãŒããããçè§£ããããå ç¢ã«ããŸãã
çµè«
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ãœãŒã·ã£ã«ãããã¯ãŒã¯ãæ§ç¯ããã«ã¯ã现éšãžã®çްå¿ã®æ³šæãå ç¢ãªã¢ãŒããã¯ãã£ãããã³é·æçãªä¿å®æ§ãžã®çŠç¹ãå¿ èŠã§ããåå®å šæ§ã¯ãå Žåã«ãã£ãŠã¯ãªãŒããŒããããšããŠèªèãããŸãããå®éã«ã¯ããã°ã®æžå°ãã»ãã¥ãªãã£ã®åäžãéçºè ã®çç£æ§ã®åäžãããå®å®ããä¿¡é Œã§ãããã©ãããã©ãŒã ãšãã圢ã§å€§ããªé åœãããããæè³ã§ãã
ããã³ããšã³ããããã¯ãšã³ããããŒã¿ã¬ã€ã€ãŒå šäœã§åå®å šãªååãæ¡çšããããšã«ãããéçºè ã¯ã匷åã§æ©èœè±å¯ãªã ãã§ãªãã倿§ãªãŠãŒã¶ãŒããŒã¹ãšé²åããèŠä»¶ã®è€éããåŠçããã®ã«ååãªå埩åã®ããã³ãã¥ããã£ãã©ãããã©ãŒã ãæ§ç¯ã§ããŸããå ç¢ãªãœãŒã·ã£ã«ãããã¯ãŒãã³ã°ã®æªæ¥ã¯æ¬è³ªçã«åå®å šã§ãããç§ãã¡ãæ§ç¯ããããžã¿ã«ã³ãã¥ããã£ããããããè²ã人éã®ã€ãªãããšåãããã匷åã§ä¿¡é Œã§ããããšãä¿èšŒããŸãã
å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã®åå®å šæ§ã«é¢ããçµéšã¯ãããŸããïŒããªãã®èããšãã¹ããã©ã¯ãã£ã¹ã以äžã§å ±æããŠãã ããïŒ